![EC2にEBSボリュームを新しくアタッチする](https://devio2023-media.developers.io/wp-content/uploads/2022/08/amazon-ebs.png)
EC2にEBSボリュームを新しくアタッチする
EBSとは
EBSは以下のようなものです。
Amazon Elastic Block Store (Amazon EBS) は、Amazon Elastic Compute Cloud (Amazon EC2) 向けに設計された、使いやすく、スケーラブルで、高性能なブロックストレージサービスです。
- Amazon EBS(EC2 ブロックストレージボリューム)| AWS https://aws.amazon.com/jp/ebs/
ブロックストレージということで、SSDやHDDのようなストレージのようなものとして使えます。 この上にXFSやEXT4などのファイルシステムを構築することでファイルの保存領域としても使えます。
今回は起動済みのEC2にEBSをアタッチする方法を整理します。
手順の整理
今回は以下の手順でEBSボリュームをEC2にアタッチします。
- EBSボリュームの作成
- EBSボリュームのアタッチ
- EC2からのマウント
EBSボリュームの作成
今回はマネージメントコンソールを使用してEBSボリュームを作成します。
EBSはEC2のサービスページから作成できます。
今回は以下のようなEBSボリュームを作成します。
注意点として、EC2インスタンスと同じAZに作成する必要があります。
今回は容量1GBのgp3のEBSボリュームを作成しました。 本来は暗号化オプションを有効化しておくのがセキュリティ上望ましいです。
EBSボリュームのアタッチ
対象のボリュームを選択して、「アクション」よりボリュームのアタッチを選択します。
インスタンスとデバイス名を入力します。 今回は予め起動しておいたEC2インスタンスを使用します。
ここで注意点としてデバイス名を今回は「/dev/sdf」としていますが、これはカーネルがブロックデバイスを認識する際に、名前が変更される可能性があるということです。
EC2からマウントする
ボリュームのEC2へのアタッチが完了したのでEC2のインスタンス内からマウントします。
デバイスの確認
lsblk
コマンドを使用してブロックデバイスを確認します。
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 1G 0 disk $ lsblk -fs NAME FSTYPE LABEL UUID MOUNTPOINT xvda1 xfs / 47834bf7-764e-42f9-9507-11a3e70b99de / └─xvda xvdf $ sudo file -s /dev/xvdf /dev/xvdf: data $ sudo file -s /dev/xvda1 /dev/xvda1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
xvda
はルートボリュームに利用されてるEBSボリュームです。
EC2の起動時に作成されたものです。パーティションが1つ区切られていて、xvda1
がルートにマウントされています。
一方で、今回アタッチしたものがxvdf
です。アタッチする際の注意書きにもあったようにデバイス名が変更されていますね。
ファイルシステムはまだ設定されていないようです。
ファイルシステムの作成
ファイルシステムがまだ構築されていないので、ファイルシステムを作成します。
$ sudo mkfs -t $ sudo mkfs -t xfs /dev/xvdf meta-data=/dev/xvdf isize=512 agcount=4, agsize=65536 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=262144, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
今回使用しているOSはAmazonLinux2です。 デフォルトでいくつかのファイルシステムツールがインストールされています。 以下が利用できるファイルシステムみたいです。
- cramfs
- ext2
- ext3
- ext4
- fat
- minix
- msdos
- vfat
- xfs
どれでファイルシステムを作成してもよいのですが、今回はルートボリュームと同じくXFSで作成しました。
作成が成功するとlsblk
からもUUIDやファイルシステムが確認できるようになります。
まだ、マウントしていないのでマウントポイントは空です。
$ lsblk -fs NAME FSTYPE LABEL UUID MOUNTPOINT xvda1 xfs / 47834bf7-764e-42f9-9507-11a3e70b99de / └─xvda xvdf xfs 8235c857-75e6-4bca-b281-758c467ed05f $ sudo file -s /dev/xvdf /dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
マウントしてみる
mount
コマンドを使用してマウントします。
今回はパーティションを作成してないので/dev/xvdf
をそのままマウントします。
ルート以下にdata
というディレクトリを作成してマウントします。
$ sudo mkdir /data $ sudo mount /dev/xvdf /data $ lsblk -fs NAME FSTYPE LABEL UUID MOUNTPOINT xvda1 xfs / 47834bf7-764e-42f9-9507-11a3e70b99de / └─xvda xvdf xfs 8235c857-75e6-4bca-b281-758c467ed05f /data $ sudo umount /data
lsblk
にもマウントポイントが表示されています。
マウントできることが確認できたのでumount
コマンドでアンマウントしておきます。
fstabで起動時にマウントする
AmazonLinux2では/etc/fstab
を編集することで起動時にマウントすることができます。
今回は以下の内容で設定しました。
# <UUID> <マウント先> <ファイルシステムの形式> <マウント時のオプション> <ダンプに含めるか> <整合性チェックの順番> UUID=47834bf7-764e-42f9-9507-11a3e70b99de / xfs defaults,noatime 1 1 UUID=8235c857-75e6-4bca-b281-758c467ed05f /data xfs defaults,nofail 0 2
1行目はルートの設定です。 2行目が追加した部分です。
UUIDは先程のlsblk -fs
で表示されたものです。
ダンプに含めるか否かは用途次第ですが、今回は「0(含めない)」としました。 EBSボリュームはスナップショットが取れるのでそちらを利用したほうが便利な局面が多いと思います。
整合性チェックは今回はルートボリュームよりも遅く行ったほうが良いので「2」としました。「0(チェックしない)」でもいいかもしれません。
/etc/fstab
の設定が完了したのでマウントします。
mount -a
を使うと/etc/fstab
に書かれた設定のものすべてがマウントされます。
$ sudo mount -a $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdf 202:80 0 1G 0 disk /data
無事にマウントできたようです。 インスタンスを再起動しても起動時からマウントされていました。
最後に
今回はEBSボリュームをEC2にマウントする方法を整理しました。 簡単にストレージを確保できるので便利ですね。
AZ内で冗長化され保存されていますが、AZ規模障害が発生した際は使えなくなるので、スナップショット等を作成し複数のAZに保存しておく必要があるというのが注意点でしょうか。
参考
- Linux で Amazon EBS ボリュームを使用できるようにする - Amazon Elastic Compute Cloud https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html